package ace.cmp.spring.data.jdbc.querydsl.core.util;

import ace.cmp.spring.data.jdbc.querydsl.core.model.PropertyRelation;
import java.lang.annotation.Annotation;
import java.util.Map;

/**
 * @author caspar
 * @date 2023/8/25 9:51
 */
public interface QuerydslPropertyRelationUtils {
  /**
   * 查找注解字段关联关系
   *
   * @param entityType 查询对象类型
   * @return key- name 注解字段关联关系 可空
   */
  Map<String, PropertyRelation> getPropertyRelation(
      Class entityType, final Class<? extends Annotation> annotationCls);

  /**
   * 获取实体对象的属性值
   *
   * @param entity           实体对象
   * @param propertyRelation 属性的类型
   * @return 属性值
   */
  Object getValue(Object entity, PropertyRelation propertyRelation);

  /**
   * 设置实体对象的属性值
   *
   * @param entity           实体对象
   * @param propertyRelation 属性的类型
   * @param value            属性值
   */
  void setValue(Object entity, PropertyRelation propertyRelation, Object value);
}
